
const Dept = require('../models/Dept.js');
const Emp = require('../models/Emp.js');

// 维护从 Dept 到 Emp 一对多 的关联关系
Dept.hasMany( Emp , {
    // 指明在 Emp 对应的表中，用于维护关联关系的外键名称
    // 即在 t_emps 表中哪个列参照了 t_depts 表的 主键
    foreignKey: 'dept_id'
});

// 维护从 Emp 到 Dept 的 多对一 关联关系
Emp.belongsTo( Dept , {
    // 指明在 Emp 对应的表中，用来维护关联关系的外键
    // 即在 t_emps 表中哪个列参照了 t_depts 表的 主键
    foreignKey: 'dept_id'
});

let p = Emp.findAll({ 
    // 指示查询那些属性
    attributes: [ 'id' , 'name' ],
    // 指示包含哪个模型对应的数据
    include: {
        model: Dept,
    } 
});

p.then( rows => {
    let emps = rows.map( row => row.dataValues );
    // console.log( emps );
    return emps ;
}).then( emps => {
    emps = emps.map( emp => {
        // 从 emp 的 Dept 属性中获得 dataValues 作为部门使用
        emp.dept = emp.Dept.dataValues;
        delete emp.Dept ;
        return emp;
    });
    return emps ;
}).then( emps => {
    emps.forEach( emp => {
        // console.log( emp );
        console.log( emp.id , emp.name , emp.dept.id , emp.dept.name );
    });
})